﻿// ***********************************************************************
// Apache 2.0 License
// Licensed under the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
//
// THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY 
// IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR 
// PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
//
// See the Apache Version 2.0 License for specific language governing
// permissions and limitations under the License.
// ***********************************************************************
// Assembly  : ContractMeow.Models
// File      : NoteAttachmentModel.cs
//
// ***********************************************************************
using ContractMeow.Api.Dtos.Attachment;
using ContractMeow.Api.Dtos.Extensions;
using System;

namespace ContractMeow.Models.Attachments
{
	public class NoteAttachmentModel : YModuleAttachmentModel, ICanSupportPreview
	{
		private Uri _previewUrl;

		internal NoteAttachmentModel(NoteAttachment noteAttachment)
			: base(noteAttachment)
		{
			PreviewUrl = noteAttachment.PreviewUrl.ToUri();
		}

		public NoteAttachmentModel()
		{
			throw new NotImplementedException("NoteAttachmentModel has a public constructor for weird technical reasons, it should not be used.");
		}

		public static NoteAttachmentModel FromNoteAttachment(NoteAttachment attachment)
		{
			return new NoteAttachmentModel(attachment);
		}

		public bool IsCacheable
		{
			get { return false; }
		}

		public Uri PreviewUrl
		{
			get { return _previewUrl; }
			set
			{
				if (Equals(value, _previewUrl))
					return;
				_previewUrl = value;
			}
		}

		public FileType FileType { get { return FileType.Note; } }

		public bool CanPreview
		{
			get { return PreviewUrl != null; }
		}
	}
}